package game.plateau;

import game.joueur.Joueur;
import game.plateau.cartes.Carte;
import game.plateau.cartes.CarteOccupeeException;
import game.support.Emplacement;
import java.util.Iterator;

public class PlateauImpl implements Plateau {
    private Carte premiereCarte;
    private Carte derniereCarte;
    private CollectionJoueur joueurs = new CollectionJoueur();

    public void ajouterCarte(Carte carte) {
        try {
            this.derniereCarte.ajouteALaSuite(carte);
            this.derniereCarte = carte;
        } catch (NullPointerException e) {
            this.premiereCarte = carte;
            this.derniereCarte = carte;
        }
    }

    public void deplacerCarte() throws CarteOccupeeException {
        if (premiereCarte.carteOccupee()) { throw new CarteOccupeeException("Première carte occupée"); }
        this.derniereCarte.ajouteALaSuite(premiereCarte);
        this.derniereCarte = premiereCarte;
        this.premiereCarte = premiereCarte.suivant();
        this.derniereCarte.ajouteALaSuite(null);
    }

    public Carte premiereCarte() {
        return this.premiereCarte;
    }

    public Carte derniereCarte() {
        return this.derniereCarte;
    }

    public Emplacement premierEmplacementOccupe() {
        return premiereCarte.recupererPremierEmplacementOccupe();
    }

    public void addPlayer(Joueur player) {
        joueurs.add(player);
    }

    public Iterator<Joueur> iterateurJoueurs() {
        return joueurs.iterator();
    }

    public int nombreDeJoueurs() {
        return joueurs.size();
    }
}
